package com.compression.tool.compression;

import com.compression.tool.model.task.CompressionTask;

import java.io.File;
import java.util.List;

/**
 * @author 自然醒
 * @version 1.0
 */

/**
 * 压缩策略接口
 */
public interface CompressionStrategy {
    /**
     * 压缩 可以向后兼容 取消或者不取消
     * @param files 文件列表
     * @param outputFile 输出文件
     * @param compressionLevel 压缩级别
     * @return
     */
    default boolean compress(List<File> files, File outputFile, int compressionLevel){
        return compress(files, outputFile, compressionLevel, null);
    }
    /**
     * 解压
     * @param compressedFile 压缩文件
     * @param outputDir 输出目录
     * @return
     */
    default boolean decompress(File compressedFile, File outputDir){
        return decompress(compressedFile, outputDir, null);
    }

    /**
     *  支持取消的压缩方法
     * @param files
     * @param outputFile
     * @param compressionLevel
     * @param task
     * @return
     */
    boolean compress(List<File> files, File outputFile, int compressionLevel, CompressionTask  task);

    /**
     * 支持取消的解压方法
     * @param compressedFile
     * @param outputDir
     * @param task
     * @return
     */
    boolean decompress(File compressedFile, File outputDir, CompressionTask task);

    /**
     * 获取支持的扩展名
     * @return
     */
    String[] getSupportedExtensions();
    /**
     * 获取格式名称
     * @return
     */
    String getFormatName(); // 格式名称
}
